/**
 * Dart中的静态成员：
 * 1、使用static关键字实现类级别的变量和函数
 * 2、静态方法不能访问非静态成员，非静态方法可以访问静态成员
 */

class Person {
  static String name = "张三";
  int age = 20;

  static void show() {
    print(name + "===");
  }

  void printInfo() {
    // 非静态方法可以访问静态成员和非静态成员
    print(name); // 访问静态属性
    print(this.age); // 访问非静态属性，this可以加可以不加，建议加上
    show(); // 调用静态方法
  }
}

/**
 * Dart对象操作符：
 *  ?  条件运算符
 *  as 类型转换
 *  is 类型判断
 *  .. 级联操作（连缀）
 */
class Person1 {
  String name;
  num age;

  Person1(this.name, this.age);

  void printInfo() {
    print("${this.name}---${this.age}");
  }
}

/**
 * Dart继承：
 * 1、使用extends关键字
 * 2、子类继承父类的可见属性和方法，但不继承构造函数
 * 3、子类可以复写父类的getter和setter
 */
class Person2 {
  String name;
  num age;

  Person2(this.name, this.age);

  Person2.xxx(this.name, this.age);

  void printInfo() {
    print("${this.name}---${this.age}");
  }
}

class Web extends Person2 {
  String sex;

  Web(String name, num age, String sex) : super(name, age) {
    this.sex = sex;
  }

  printWeb() {
    print("${this.name}---${this.age}---${this.sex}");
  }
}

class Web2 extends Person2 {
  Web2(String name, num age) : super.xxx(name, age) {}

  @override
  void printInfo() {
    print("姓名：${this.name}---年龄：${this.age}");
  }
}

main() {
//  print(Person.name);
//  Person.show();

//  Person p = new Person();
//  p.printInfo();

  Person1 p1 = new Person1("李四", 12);
  p1?.printInfo(); // p1为空，就不执行方法；不为空，就继续执行

  // Dart中的连缀
  p1
    ..name = "张三"
    ..age = 30
    ..printInfo();

  Web web = new Web("Allen", 13, "男");
  web.printInfo();
  web.printWeb();

  Web2 web2 = new Web2("Allen", 13);
  web2.printInfo();
}
